=====================================
Введение. Установка. Примеры программ
=====================================

Введение
========

Пакет ``ManagedIrbis5`` представляет собой фреймворк для создания клиентских приложений для системы автоматизации библиотек ИРБИС64 на платформе Microsoft .NET 8.

Пакет не содержит неуправляемого кода и не требует ``irbis64_client.dll``. Успешно работает на 32-битных и 64-битных версиях операционных систем Windows, Linux и Mac OS X.

Основные возможности пакета:

* Поиск и расформатирование записей.
* Создание и модификация записей, сохранение записей в базе данных на сервере.
* Работа с поисковым словарем: просмотр термов и постингов.
* Администраторские функции: получение списка пользователей, его модификация, передача списка на сервер, создание и удаление баз данных.
* Импорт и экспорт записей в формате ISO 2709 и в обменном формате ИРБИС.

Поддерживаются Microsoft Visual Studio (в т. ч. Community Edition), начиная с версии 17.8 (2022), и сервер ИРБИС64, начиная с 2014. Более ранние версии Visual Studio будут выдавать ошибки, т. к. они не поддерживают .NET 8. Аналогично обстоит дело и с более ранними версиями сервера ИРБИС64.

Установка
=========

``ManagedIrbis5`` загружен в централизованный репозиторий пакетов NuGet, поэтому можно установить его с помощью стандартной утилиты ``dotnet``, входящей в поставку .NET:

::

  dotnet add package ManagedIrbis5

Также можно установить пакет, скачав необходимые файлы с репозитория GitHub: https://github.com/amironov73/ManagedIrbis5

Кроме того, доступны ночные сборки на AppVeyor: https://ci.appveyor.com/project/AlexeyMironov/ManagedIrbis5/build/artifacts

Примеры программ
================

Ниже прилагается пример простой программы. Сначала находятся и загружаются 10 первых библиографических записей, в которых автором является А. С. Пушкин. Показано нахождение значения поля с заданным тегом и подполя с заданным кодом. Также показано расформатирование записи в формат ``brief``.

.. code-block:: c

    using System;
    using System.Threading.Tasks;

    using ManagedIrbis;

    using ManagedIrbis.Infrastructure;

    using static System.Console;

    #nullable enable

    class Program
    {
        static async Task<int> Main(string[] args)
        {
            try
            {
                await using var connection = ConnectionFactory.Shared
                    .CreateConnection();

                connection.Host = args.Length == 0
                    ? "127.0.0.1"
                    : args[0];
                connection.Username = "librarian";
                connection.Password = "secret";

                var success = await connection.ConnectAsync();
                if (!success)
                {
                    await Error.WriteLineAsync("Can't connect");
                    return 1;
                }

                WriteLine("Successfully connected");

                // Ищем все книги, автором которых является А. С. Пушкин
                // Обратите внимание на двойные кавычки в тексте запроса
                var found = await connection.SearchAsync
                    (
                        "\"A=ПУШКИН$\""
                    );

                WriteLine($"Найдено записей: {found.Length}");

                // Чтобы не распечатывать все найденные записи,
                // отберем только 10 первых
                foreach (var mfn in found[..10])
                {
                    // Получаем запись из базы данных
                    var record = await connection.ReadRecordAsync(mfn);

                    // Извлекаем из записи интересующее нас поле и подполе
                    var title = record.FM(200, 'a');
                    WriteLine($"Title: {title}");

                    // Форматируем запись средствами сервера
                    var description = await connection.FormatRecordAsync
                        (
                            "@brief",
                            mfn
                        );
                    WriteLine($"Биб. описание: {description}");

                    WriteLine(); // Добавляем пустую строку
                }

                // Отключаемся от сервера
                await connection.DisposeAsync();
                WriteLine("Successfully disconnected");
            }
            catch (Exception exception)
            {
                WriteLine(exception);
                return 1;
            }

            return 0;
        }
    }

Совместимость с предыдущими версиями
====================================

Пятая версия фреймворка ``ManagedIrbis`` имеет ряд особенностей, делающей ее несовместимой с предыдущими версиями.

К сожалению, переход на пятую версию путём простой перекомпиляции исходных кодов невозможен. Требуется ручное редактирование кода.

Благодарности
=============

Автор выражает благодарность:

* Ивану Батраку (СФУ), протестировавшему библиотеку на совместимость с разными версиями ИРБИС-сервера;

* Шувалову Арсению Валентиновичу (Саратовская государственная консерватория им. Л. В. Собинова), выявившему ошибки в библиотеке;

* Артёму Васильевичу Гончарову (Научная музыкальная библиотека Санкт-Петербургской Консерватории им. Н. А. Римского-Корсакова), выявившему некоторые досадные ошибки в библиотеке.

Лицензия
========

Пакет ``ManagedIrbis5`` распространяется по лицензии MIT:

    *Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное обеспечение»), безвозмездно использовать Программное обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также лицам, которым предоставляется данное Программное обеспечение, при соблюдении следующих условий:*

    *Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного обеспечения.*

    *ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.*
